/**
 * @file       名称 key.c
 * @brief      简介 按键读取
 * @author     作者 世博
 * @date       日期 2025-07-21
 * @version    版本 V1.0
 * @copyright  版权
 */

#include "key.h"

/**
 * @brief      函数功能 获取当前按键
 * @param      参数描述 NONE
 * @retval     返回描述 按键编号（1 ~ 16）没有按下，返回0
 * @note       注意事项
 */
int getKeyValue(void)
{
    int h_arr[4] = {KEY_H1_PIN, KEY_H2_PIN, KEY_H3_PIN, KEY_H4_PIN};
    int v_arr[4] = {KEY_V1_PIN, KEY_V2_PIN, KEY_V3_PIN, KEY_V4_PIN};
    int i, j = 0;
    int key_value = 0;

    for (i = 0; i < 4; i++)
    {
        DL_GPIO_setPins(KEY_PORT, h_arr[i]);
        DL_GPIO_clearPins(KEY_PORT, h_arr[(i + 1) % 4]);
        DL_GPIO_clearPins(KEY_PORT, h_arr[(i + 2) % 4]);
        DL_GPIO_clearPins(KEY_PORT, h_arr[(i + 3) % 4]);

        for (j = 0; j < 4; j++)
        {
            if (DL_GPIO_readPins(KEY_PORT, v_arr[j]) != 0)
            {
                key_value = j * 4 + i + 1;
            }
        }
    }

    return key_value;
}